iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Python

pythonGUI學習筆記系列 第 13

Day 13: Pyside6 列表(QListWidget) (一) 增刪改查和信號

  • 分享至 

  • xImage
  •  

QListWidget

  • QListWidget : 列表選擇元件。可以存放字串和其他元件。

QListWidget 添加元件和增加刪除元素到列表。

  • QListWidget(): 創立一個列表。列表裡的元素每個類別都是 QListWidgetItem ,假如今天輸入字串,他也會自己轉成 QListWidgetItem 類別。
  • addItem(str or QListWidgetItem)addItems([str]): 添加元素進列表裡,可以一個一個添加,也可以使用序列增加,但只能是字串序列。下面範例是使用 addItems 添加A和B。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        #建立一個列表,並添加A和B
        List = QListWidget()
        List.addItems(['A','B'])

        layout = QVBoxLayout()
        layout.addWidget(List)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

addItems

  • insertItem(index,str or QListWidgetItem)insertItems(index,[str]) : 插入元素進列表。要用序列插入要注意只能用字串序列。
  • takeItem(index) : 刪除元素。
    下面範例是將apple pie 刪除,並插入一個元素。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
from PySide6.QtCore import Qt

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        QList = QListWidget()
        QList.addItems(["apple pie","apple","banana",])

        QList.takeItem(0)
        QList.insertItem(1,"插入的元素")

        #布局
        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

插入和刪除元素

QListWidgetItem 使用

  • QListWidgetItem : 如果想要添加除了字串的元件進去,可以用 addItem(QListWidgetItem)。使用方法以按鈕和標籤舉例。
  1. 先建立一個 QWidget 放入標籤和按鈕。
  2. 使用 addItem(QListWidgetItem)QListWidgetItem 添加到列表裡。
  3. 使用 setSizeHint(QWidget.sizeHint()) 設置 QListWidgetItem 的大小,與 QWidget 大小匹配。
  4. 使用 setItemWidget(QListWidgetItem,widget) 把建立好的 QWidget 設定到QListWidgetItem 裡面
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
class Add(QWidget):
    def __init__(self):
        super().__init__()
        widget = QHBoxLayout()
        label = QLabel("標籤")
        btn = QPushButton("按鈕")
        widget.addWidget(label)
        widget.addWidget(btn)
        self.setLayout(widget)


class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        QList = QListWidget()
        Item = QListWidgetItem()
        widget = Add()

        # 設置QListWidgetItem的大小,匹配自定義小部件
        Item.setSizeHint(widget.sizeHint())
        QList.addItem(Item)
        # 將設置好的QWidget設定給QListWidgetItem
        QList.setItemWidget(Item,widget)

        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

QListWidgetItem

QListWidget 查找

  • item(index): 取出指定的元素。
  • findItem(str,flag): 查找元素,有不同的找尋方式,需要使用 Qt.MatchFlag。下面範例是選用 MatchContains 只要包含指定的文字就會列印出來。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        QList = QListWidget()
        QList.addItems(["apple pie","apple","banana",])

        #只要包含apple就會列印出來
        result = QList.findItems("apple",Qt.MatchFlag.MatchContains)
        for i in result:
            print(i.text())

        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

查找

QListWidget 常用的信號

  • currentItemChanged.connect(function) : 當選擇改變。
  • itemChanged.connect(function) : 當元素選中狀態改變。可以搭配 setCheckState(Qt.CheckState) 使用,會在新增的那列增加一個勾選框。
    下面範例是在 apple pie 前面增加勾選框,當勾選會列印文字,還有選擇改變時會列印文字。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        QList = QListWidget()
        QList.addItems(["apple pie","apple","banana",])

        #將apple pie 設定沒選狀態
        QList.item(0).setCheckState(Qt.CheckState.Unchecked)

        # 選擇狀態改變
        QList.currentItemChanged.connect(lambda: print("選擇的元素改變了"))
        QList.itemChanged.connect(lambda: print("apple pie 選中狀態改變了"))

        #布局
        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

總結

  • QListWidget 添加元件和插入選項
功能 方法
創建列表 QListWidget()
添加元素(單個) addItem(str or QListWidgetItem)
添加元素(多個) addItems([str])
插入元素(單個) insertItem(index,str or QListWidgetItem)
插入元素(多個) insertItem(index,[str])
刪除元素 takeItem(index)
  • 添加字串的話,會自動轉成 QListWidgetItem 這類別。
  • QListWidgetItem 使用
  1. 先建立一個 QWidget 放入元件。
  2. 使用 addItem(QListWidgetItem)QListWidgetItem 添加到列表裡。
  3. 使用 setSizeHint(QWidget.sizeHint()) 設置 QListWidgetItem 的大小,與 QWidget 大小匹配。
  4. 使用 setItemWidget(QListWidgetItem,widget) 把建立好的 QWidget 設定到QListWidgetItem 裡面
  • QListWidget 查找
    要配合 Qt.MatchFlag 選擇要的搜索方式。
功能 方法
查找 findItem(str,flag)
  • QListWidget 常用的功能
功能 方法
選擇改變 currentItemChanged.connect(function)
選中狀態改變 itemChanged.connect(function)

上一篇
Day 12: PySide6 滑動條(QSlider)和QSpinBox數值調整元件
下一篇
Day 14: Pyside6 列表(QListWidget) (二) 排序和常用功能
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言